#pragma once 

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>

typedef int QDataType;

typedef struct QueueNode {
    struct	QueueNode* next;
    QDataType val;
}QueueNode;

typedef struct Queue {
    QueueNode* head;
    QueueNode* tail;
    int size;
}Queue;

void QueueInit(Queue* pq);
void QueueDestory(Queue* pq);

void QueuePush(Queue* pq, QDataType val);
void QueuePop(Queue* pq);

bool QueueEmpty(Queue* pq);
int QueueSize(Queue* pq);
QDataType QueueFront(Queue* pq);
QDataType QueueBack(Queue* pq);